const http = require('http');
const fs = require('fs');
const path = require('path');

// 获取命令行参数
const args = process.argv.slice(2);
const fileName = args[0];

// 创建HTTP服务器
const server = http.createServer((req, res) => {
  console.log(`收到请求: ${req.method} ${req.url}`);
  
  // 设置响应头
  res.writeHead(200, {
    'Content-Type': 'text/plain; charset=utf-8',
    'Access-Control-Allow-Origin': '*'
  });
  
  // 确定要读取的文件
  let targetFile;
  if (fileName) {
    // 如果传入了命令行参数，检查文件是否存在
    targetFile = fileName;
    if (!fs.existsSync(targetFile)) {
      const errorMsg = `错误：文件 ${targetFile} 不存在！`;
      console.error(errorMsg);
      res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end(errorMsg);
      return;
    }
  } else {
    // 如果没有传入参数，默认读取当前文件
    targetFile = __filename; // fileReader2.js
  }
  
  console.log(`正在读取文件: ${targetFile}`);
  
  // 使用 fs.open, fs.read, fs.close 读取文件
  fs.open(targetFile, 'r', (err, fd) => {
    if (err) {
      console.error('打开文件时出错:', err);
      res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end('打开文件时出错: ' + err.message);
      return;
    }
    
    // 获取文件信息以确定文件大小
    fs.fstat(fd, (err, stats) => {
      if (err) {
        console.error('获取文件信息时出错:', err);
        fs.close(fd);
        res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
        res.end('获取文件信息时出错: ' + err.message);
        return;
      }
      
      const buffer = Buffer.alloc(stats.size);
      
      // 使用 fs.read 读取文件内容
      fs.read(fd, buffer, 0, stats.size, 0, (err, bytesRead, buffer) => {
        if (err) {
          console.error('读取文件时出错:', err);
          fs.close(fd);
          res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
          res.end('读取文件时出错: ' + err.message);
          return;
        }
        
        // 关闭文件
        fs.close(fd, (err) => {
          if (err) {
            console.error('关闭文件时出错:', err);
          }
        });
        
        console.log('文件读取成功，响应到浏览器');
        res.end(buffer.toString('utf8'));
      });
    });
  });
});

// 监听8081端口
const PORT = 8081;
server.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
  if (fileName) {
    console.log(`将读取文件: ${fileName}`);
  } else {
    console.log('将读取当前文件: fileReader2.js');
  }
  console.log('请在浏览器中访问该地址查看文件内容');
});

// 处理服务器错误
server.on('error', (err) => {
  console.error('服务器错误:', err);
});
